import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;


public enum PkmnPokemon {
	
	// { Type1, Type2, HP, Attack, Defense, Special Attack, Special Defense, Speed, four moves, image url },
	//		ONLY THE LAST ONE HAS A SEMICOLON
	
	// We can exchange the necessary moves later, just making note of which moves have a base of 2,
	// or are neutral, since those are mostly just stat-modifying moves.
	Bulbasaur(PkmnType.GRASS, PkmnType.POISON, 294, 216, 216, 251, 251, 207, PkmnMove.GigaDrain, PkmnMove.SeedBomb, PkmnMove.SludgeBomb, PkmnMove.HiddenPower.setType(PkmnType.FIRE), loadImage("Bulbasaur.gif")),
	Ivysaur(PkmnType.GRASS, PkmnType.POISON, 324, 245, 247, 284, 284, 240, PkmnMove.EnergyBall, PkmnMove.LeafStorm, PkmnMove.SludgeBomb, PkmnMove.HiddenPower.setType(PkmnType.FIRE), loadImage("Ivysaur.gif")),
	Venusaur(PkmnType.GRASS, PkmnType.POISON, 364, 289, 291, 328, 328, 284, PkmnMove.Growth, PkmnMove.EnergyBall, PkmnMove.SludgeBomb, PkmnMove.HiddenPower.setType(PkmnType.FIRE), loadImage("Venusaur.gif")),
	//Exchange "Growth"
	Charmander(PkmnType.FIRE, PkmnType.NULL, 282, 223, 203, 240, 218, 251, PkmnMove.DragonDance, PkmnMove.FlareBlitz, PkmnMove.Flamethrower, PkmnMove.BrickBreak, loadImage("Charmander.gif")),
	//Exchange "Dragon Dance"
	Charmeleon(PkmnType.FIRE, PkmnType.NULL, 320, 249,236, 284, 251, 284, PkmnMove.FireBlast, PkmnMove.DragonPulse, PkmnMove.Crunch, PkmnMove.HiddenPower.setType(PkmnType.ICE), loadImage("Charmeleon.gif")),
	//Charmeleon I chose you. 
	Charizard(PkmnType.FIRE, PkmnType.FLYING, 360, 293, 280, 348, 295, 328, PkmnMove.FireBlast, PkmnMove.AirSlash, PkmnMove.FocusBlast, PkmnMove.HiddenPower.setType(PkmnType.ICE), loadImage("Charizard.gif")),
	//Not all moves have been added to move data base 10/22/11
	Squirtle(PkmnType.WATER, PkmnType.NULL, 292, 214, 251, 218, 249, 203, PkmnMove.FakeOut, PkmnMove.AquaJet, PkmnMove.Waterfall, PkmnMove.BrickBreak, loadImage("Squirtle.gif")),
	Wartortle(PkmnType.WATER, PkmnType.NULL, 322, 247, 284, 251, 284, 236, PkmnMove.Bite, PkmnMove.IceBeam, PkmnMove.Surf, PkmnMove.BrickBreak, loadImage("Wartortle.gif")),
	Blastoise(PkmnType.WATER, PkmnType.NULL, 362, 291, 328, 295, 339, 280, PkmnMove.RapidSpin, PkmnMove.Scald, PkmnMove.FlashCannon, PkmnMove.IceBeam, loadImage("Blastoise.gif")),
	Pikachu(PkmnType.ELECTRIC, PkmnType.NULL, 274, 229, 174, 218, 196, 306, PkmnMove.NastyPlot, PkmnMove.ThuderPunch, PkmnMove.ThunderBolt, PkmnMove.HiddenPower.setType(PkmnType.ICE), loadImage("Pikachu.gif")),
	//In Moveset.txt says ThunderPunch (Grass Knot) . . . not sure what to do.
	Raichu(PkmnType.ELECTRIC, PkmnType.NULL, 324, 309, 229, 306, 284, 328, PkmnMove.NastyPlot, PkmnMove.Thunderbolt, PkmnMove.HiddenPower.setType(PkmnType.ICE), PkmnMove.FocusBlast, loadImage("Raichu.gif")),
	Gastly(PkmnType.GHOST, PkmnType.POISON, 264, 185, 174, 328, 185, 284, PkmnMove.ShadowBall, PkmnMove.HiddenPower.setType(PkmnType.FIGHTING), PkmnMove.SludgeBomb, PkmnMove.DarkPulse, loadImage("Gastly.gif")),
	Haunter(PkmnType.GHOST, PkmnType.POISON, 294, 218, 207, 361, 229, 317, PkmnMove.ShadowBall, PkmnMove.HiddenPower.setType(PkmnType.GROUND),PkmnMove.SludgeBomb, PkmnMove.Thunderbolt, loadImage("Haunter.gif")),
	Gengar(PkmnType.GHOST, PkmnType.POISON, 324, 251, 240, 394, 273, 350, PkmnMove.ShadowBall, PkmnMove.FocusBlast, PkmnMove.Psychic, PkmnMove.ThunderBolt, loadImage("Gengar.gif")),
	Onix(PkmnType.ROCK, PkmnType.GROUND, 274, 207, 460, 174, 207, 262, PkmnMove.StoneEdge, PkmnMove.Earthquake, PkmnMove.RockPolish, PkmnMove.Explosion, loadImage("Onix.gif")),
	Scyther(PkmnType.BUG, PkmnType.FLYING, 344, 350, 284, 229, 284, 339, PkmnMove.SwordDance, PkmnMove.AerialAce, PkmnMove.BrickBreak, PkmnMove.BugBite, loadImage("Scyther.gif")),
	Articuno(PkmnType.ICE, PkmnType.FLYING, 384, 295, 328, 317, 383, 295, PkmnMove.Roost, PkmnMove.IceBeam, PkmnMove.Blizzard, PkmnMove.SkyAttack, loadImage("Articuno.gif")),
	Zapdos(PkmnType.ELECTRIC, PkmnType.FLYING, 384, 306, 295, 383, 306, 328, PkmnMove.Thunderbolt, PkmnMove.HeatWave, PkmnMove.HiddenPower.setType(PkmnMove.ICE), PkmnMove.Roost, loadImage("Zapdos.gif")),
	Moltres(PkmnType.FIRE, PkmnType.FLYING, 384, 328, 306, 383, 295, 306, PkmnMove.FireBlast, PkmnMove.AirSlash, PkmnMove.HiddenPower.setType(PkmnType.GRASS), PkmnMove.Roost, loadImage("Moltres.gif")),
	Dratini(PkmnType.DRAGON, PkmnType.NULL, 286, 249, 207, 218, 218, 218, PkmnMove.Waterfall, PkmnMove.FireBlast, PkmnMove.DracoMeteor, PkmnMove.ExtremeSpeed, loadImage("Dratini.gif")),
	Dragonair(PkmnType.DRAGON, PkmnType.NULL, 326, 293, 251, 262, 262, 262, PkmnMove.DragonDance, PkmnMove.FireBlast, PkmnMove.AquaTail, PkmnMOve.ExtremeSpeed, loadImage("Dragonair.gif")),
	Dragonite(PkmnType.DRAGON, PkmnType.FLYING, 386, 403, 317, 328, 328, 284, PkmnMove.Superpower, PkmnMove.FirePunch, PkmnMove.DragonClaw, PkmnMove.ExtremeSpeed, loadImage("Dragonite.gif")),
	Mewtwo(PkmnType.PSYCHIC, PkmnType.NULL, 416, 350, 306, 447, 306, 394, PkmnMove.Psystrike, PkmnMove.AuraSphere, PkmnMove.IceBeam, PkmnMove.Thunder, loadImage("Mewtwo.gif")),
	Mew(PkmnType.PSYCHIC, PkmnType.NULl, 404, 328, 328, 328, 328, 328, PkmnMove.NastyPlot, PkmnMove.Psyshock, PkmnMove.AuraSphere, PkmnMove.FireBlast, loadImage("Mew.gif")),
	Banner(PkmnType.COOL, PkmnType.PSYCHIC, 500, 500, 500, 500, 500, 500, PkmnMove.Psychic, PkmnMove.FireBlast, PkmnMove.Thunder, PkmnMove.Win, loadImage("Banner.gif"));

	
	
	PkmnType type1, type2;
	int hp, atk, def, spa, spd, spe;
	PkmnMove[] moveset;
	Image sprite;
	
	
	private PkmnPokemon(PkmnType type1, PkmnType type2, int hp, int atk, int def, int spa, int spd, int spe, PkmnMove move0, PkmnMove move1, PkmnMove move2, PkmnMove move3, Image sprite)
	{
		this.type1 = type1;
		this.type2 = type2;
		this.hp = hp;
		this.atk = atk;
		this.def = def;
		this.spa = spa;
		this.spd = spd;
		this.spe = spe;
		moveset[0] = move0;
		moveset[1] = move1;
		moveset[2] = move2;
		moveset[3] = move3;
		this.sprite = sprite;
	}
	
	public static Image loadImage(String url)
	{
		BufferedImage img = null;
		try
		{
			img = ImageIO.read(new File(url));
		} catch (IOException e) {}
		
		return img;
	}
	
	public Image getSprite() { return sprite; }

}
